//#define _CRT_SECURE_NO_WARNINGS 1
//
//#include<stdlib.h>
//#include<string.h>
//
//typedef char StackDateType;
//typedef struct stack {
//    StackDateType* date;
//    int size;
//    int capacity;
//} Stack;
//
//void stackInit(Stack* pst);
//void stackDestory(Stack* pst);
//void checkCapacity(Stack* pst);
//int  stackIsEmpty(Stack* pst);
//void stackPush(Stack* pst, StackDateType data);
//void stackPop(Stack* pst);
//StackDateType stackTop(Stack* pst);
//int  stackSize(Stack* pst);
//
//void stackInit(Stack* pst) {
//    pst->date = NULL;
//    pst->size = pst->capacity = 0;
//}
//
//void stackDestory(Stack* pst) {
//    free(pst->date);
//    pst->date = NULL;
//    pst->size = pst->capacity = 0;
//}
//
//void checkCapacity(Stack* pst) {
//    if (pst->size == pst->capacity) {
//        int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
//        StackDateType* tmp = (StackDateType*)realloc(pst->date,
//            sizeof(StackDateType) * newcapacity);
//        if (tmp == NULL) {
//            perror("realloc mistake");
//            exit(-1);
//        }
//        pst->date = tmp;
//        pst->capacity = newcapacity;
//    }
//}
//
//int stackIsEmpty(Stack* pst) {
//    return pst->size == 0;
//}
//
//void stackPush(Stack* pst, StackDateType data) {
//    checkCapacity(pst);
//    pst->date[pst->size++] = data;
//}
//
//void stackPop(Stack* pst) {
//    pst->size -= 1;
//}
//
//StackDateType stackTop(Stack* pst) {
//    return pst->date[pst->size - 1];
//}
//
//int stackSize(Stack* pst) {
//    return pst->size;
//}
//
//
//
//int main()
//{
//    Stack st;
//    stackInit(&st);
//    stackPush(&st, '1');
//    stackPush(&st, '2');
//    stackPush(&st, '3');
//    stackPush(&st, '3');
//
//    stackPush(&st, '3');
//    stackPush(&st, '3');
//    stackPush(&st, '3');
//    stackPush(&st, '3');
//
//    stackPush(&st, '3');
//
//    int ret = stackIsEmpty(&st);
//
//    char ch = stackTop(&st);
//
//    stackDestory(&st);
//    return 0;
//}